import axios from 'axios'

// 设置请求的基础路径， 他会替代掉 协议、ip、端口号部分
const baseURL = 'http://myreactserver.shareach.cn'

// axios 封装的核心逻辑

class HttpRequest {
    // baseUrl 是在创建实例的时候作为参数传入
    // 1.constructor 是用来接受传入参数的
    constructor(baseURL) {
        this.baseURL = baseURL
    }
    getInsideConfig() {  /* 3.定义一个初始的参数 */
        const config = {
            baseURL: this.baseURL,
            headers: {
                // 请求头
                "Content-Type": "application/json",
            }
        }
        return config
    }

    interceptions(instance) {
        // 6.请求拦截器
        instance.interceptors.request.use(config => {
            console.log(config,'config')
            if(config.method == 'OPTIONS') {
                return Promise.reject('Cancel preflight request')
            }
            return config
        }, (error) => {
            Promise.reject(error)
        })
        // 7.响应拦截器
        instance.interceptors.response.use(res => {
            return res.data
        }, (error) => {
            Promise.reject(error)
        })
    }
    // 4.options 是外部传递进来的参数
    request(options) {
        options = { ...this.getInsideConfig(), ...options } /* 对象的数据重组 */
        // 5.创建axios的实例
        const instance = axios.create()
        // 8.完成实例拦截器的绑定，axios封装完成，前往home页面进行接口封装
        this.interceptions(instance)
        return instance(options)

    }
}

// 2.暴露方法，同时设置形参接受url
export default new HttpRequest(baseURL)